// const CryptoJS = require('./aes.js'); //引用AES源码js
import CryptoJS from './aes.js'

const key = CryptoJS.enc.Utf8.parse('9vWA4OjJ9xsZCUnM'); //十六位十六进制数作为秘钥
const iv = CryptoJS.enc.Utf8.parse('0102030405060708'); //十六位十六进制数作为秘钥偏移量
/**
 * aes 解密方法
 */
function AesDecrypt(word) {
	let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
	let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
	let decrypt = CryptoJS.AES.decrypt(srcs, key, {
		iv: iv,
		mode: CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7
	});
	let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
	return decryptedStr.toString();
}
/**
 * aes 加密方法
 */
function AesEncrypt(word) {
	let srcs = CryptoJS.enc.Utf8.parse(word);
	let encrypted = CryptoJS.AES.encrypt(srcs, key, {
		iv: iv,
		mode: CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7
	});
	return encrypted.ciphertext.toString().toUpperCase();
}

/**
 * base64 加密方法
 */
function Base64Encode(val) {
	let str = CryptoJS.enc.Utf8.parse(val);
	let base64 = CryptoJS.enc.Base64.stringify(str);
	return base64;
}

/**
 * base64 解密方法
 */
function Base64Decode(val) {
	let words = CryptoJS.enc.Base64.parse(val);
	return words.toString(CryptoJS.enc.Utf8);
}
// 解密方法
function decrypt(word) {
	const base64 = CryptoJS.enc.Base64.parse(word);
	const src = CryptoJS.enc.Base64.stringify(base64);
	const decryptData = CryptoJS.AES.decrypt(src, key, {
		mode: CryptoJS.mode.ECB,
		padding: CryptoJS.pad.Pkcs7
	});
	const decryptedStr = decryptData.toString(CryptoJS.enc.Utf8);
	return decryptedStr.toString();
}

function aesEncrypt(key, plainText) {
	const encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(plainText), CryptoJS.enc.Utf8.parse(key), {
		iv: CryptoJS.enc.Utf8.parse(key),
		mode: CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7
	});
	// 返回base64
	return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
// 加密方法
function encrypt(word) {
	const srcs = CryptoJS.enc.Utf8.parse(word);
	const encrypted = CryptoJS.AES.encrypt(srcs, key, {
		mode: CryptoJS.mode.ECB,
		padding: CryptoJS.pad.Pkcs7
	});
	return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
// 解密方法
function decryptKey(word, key2) {
	key2 = CryptoJS.enc.Utf8.parse(key2);
	const base64 = CryptoJS.enc.Base64.parse(word);
	const src = CryptoJS.enc.Base64.stringify(base64);
	const decryptData = CryptoJS.AES.decrypt(src, key2, {
		mode: CryptoJS.mode.ECB,
		padding: CryptoJS.pad.Pkcs7
	});
	const decryptedStr = decryptData.toString(CryptoJS.enc.Utf8);
	return decryptedStr.toString();
}
// 加密方法
function encryptKey(word, key2) {
	key2 = CryptoJS.enc.Utf8.parse(key2);
	const srcs = CryptoJS.enc.Utf8.parse(word);
	const encrypted = CryptoJS.AES.encrypt(srcs, key2, {
		mode: CryptoJS.mode.ECB,
		padding: CryptoJS.pad.Pkcs7
	});
	return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}

//暴露接口
// module.exports = {
// 	AesEncrypt,
// 	AesDecrypt,
// 	Base64Encode,
// 	Base64Decode,
// 	encrypt,
// 	decrypt,
// 	encryptKey,
// 	decryptKey,
// 	aesEncrypt
// };
export default {
	AesEncrypt,
	AesDecrypt,
	Base64Encode,
	Base64Decode,
	encrypt,
	decrypt,
	encryptKey,
	decryptKey,
	aesEncrypt
};